#include<iostream>
#include<string>
#include<pthread.h>
#include<unistd.h>

pthread_mutex_t mtx;
pthread_cond_t cond;


//控制work线程，让它定期运行 
void *ctrl(void *args)
{
    std::string name=(char *)args;
    while(true){
        std::cout<<"master say:begin work"<<std::endl;
        //唤醒在条件变量下等待的一个线程 ，在cond等待队列的第一个线程
       // pthread_cond_signal(&cond);

        //唤醒多个线程
        pthread_cond_broadcast(&cond);
        sleep(3);
    }

}

void  *work(void *args)
{
    int number=*(int *)args;
    delete (int *)args;

    while(true){
        //条件变量内部存在一个等待队列
        pthread_cond_wait(&cond,&mtx);
        std::cout<<"worker: "<<number<<"is working .."<<std::endl;
    }
}


#define NUM 3

int main()
{

    pthread_mutex_init(&mtx,nullptr);
    pthread_cond_init(&cond,nullptr);

    
    pthread_t master;
    pthread_t worker[NUM];
    pthread_create(&master,nullptr,ctrl,(void *)"boss");

    for(int i=0;i<NUM;i++){
        int *number =new int (i);
        pthread_create(worker+i,nullptr,work,(void *)number);
    }

    for(int i=0;i<NUM;i++){

        pthread_join(worker[i],nullptr);
        
    }
    pthread_mutex_destroy(&mtx);
    pthread_cond_destroy(&cond);
    pthread_join(master,nullptr);

    return 0;
}